package com.caijinbang.study.task;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
 * 测试多线程任务
 *
 * @author caijb
 * @version 1.0.0
 * @date 2018-05-10 13:10
 */
@Service
@Slf4j
public class DemoTaskServiceImpl {

    @Autowired
    private TaskExecutor taskExecutor;

    /**
     * 测试多线程,异步声明,
     * 如果在方法处表示是异步方法，如果在类处表示异步类（所有的方法都是异步方法）。
     */
    @Async
    public void testTaskExecutor1(int i) {
        log.info("当前线程{},执行异步i+1：{}", Thread.currentThread(), (i + 1));
    }

    /**
     * 注解式调用
     *
     * @param i
     */
    public void testTaskExecutor2(int i) {
        taskExecutor.execute(new Runnable() {
            @Override
            public void run() {
                log.info("当前线程{},执行异步i+1：{}", Thread.currentThread(), (i + 1));
            }
        });
    }
}
